from uiautomation import EditControl
from penguin import auto, logging
from penguin.window import Window

class FriendDialog(Window):
    """
    此类型实例表示一个微信好友对话框。
    """

    def __init__(self, name:str, class_name:str, parent):
        """
        初始化好友对话框实例。

        参数：
            name 好友名称。
            parent 父级控件。
        """
        super().__init__(name, '好友窗口', class_name, parent)
     

    def __get_editor(self)-> EditControl:
        try:
            dialog = self.window.ToolBarControl(searchDepth=4, Name='导航').GetNextSiblingControl().GetNextSiblingControl()
            edit = dialog.GetChildren()[0].EditControl(searchDepth=9)
            return edit
        except LookupError as e:
            if e.args[0].find('导航') >= 0:
                logging.error('查找不到 导航 元素，微信界面结构是否修改。')
            logging.error('查找不到元素，微信界面结构是否修改。')
            return None
        
    def conform_features(self) -> bool:
        edit_control = self.__get_editor()
        return edit_control != None and edit_control.Name == self.name

    def send_message(self, message:str, interval=0)-> bool:
        """
        向指定的好友发送信息。

        参数：
            message 要发送给好友的信息。
        返回：
            成功发送信息返回True否则返回False。
        """
        if self.is_on_desk():
            edit_control = self.__get_editor()
            if edit_control != None:
                edit_control.Click()
                auto.SendKeys(message, interval=interval)
                auto.SendKeys('{Enter}')
                logging.info('已经向好友 %s 发送 %s 。' % (self.name, message))
                return True
            else:
                logging.info('没能向好友 %s 发送信息。' % self.name)
                return False
        else:
            logging.warning('以 %s 为名称的 %s 没有显示在系统桌面。' % (self.name, self.desc))
            return False

    def close(self)-> bool:
        """
        关闭窗口。
        """ 
        return True